@@ -12,9 +12,11 @@ angular.module('codexApp.index', [])
|
||
| 12 | 12 |
|
| 13 | 13 |
var all_files = []; |
| 14 | 14 |
var current_page = 0; |
| 15 |
- var page_count = 5 |
|
| 15 |
+ var page_count = 2; |
|
| 16 |
+ var page_count_start = 30; |
|
| 16 | 17 |
var info_count = 0; |
| 17 | 18 |
var loaded = false; |
| 19 |
+ var view_changing = true; |
|
| 18 | 20 |
$scope.files = []; |
| 19 | 21 |
|
| 20 | 22 |
$scope.setView = function() {
|
@@ -29,7 +31,7 @@ angular.module('codexApp.index', [])
|
||
| 29 | 31 |
info_count = all_files.length; |
| 30 | 32 |
var f = []; |
| 31 | 33 |
var i = 0; |
| 32 |
- for (i = 0; i <= (page_count * 5); i++) {
|
|
| 34 |
+ for (i = 0; i <= page_count_start; i++) {
|
|
| 33 | 35 |
if(all_files[i] != undefined){
|
| 34 | 36 |
f.push(all_files[i]) |
| 35 | 37 |
} else {
|
@@ -48,7 +50,7 @@ angular.module('codexApp.index', [])
|
||
| 48 | 50 |
info_count = all_files.length; |
| 49 | 51 |
var f = []; |
| 50 | 52 |
var i = 0; |
| 51 |
- for (i = 0; i <= (page_count * 5); i++) {
|
|
| 53 |
+ for (i = 0; i <= page_count_start; i++) {
|
|
| 52 | 54 |
if(all_files[i] != undefined){
|
| 53 | 55 |
f.push(all_files[i]) |
| 54 | 56 |
} else {
|
@@ -77,28 +79,45 @@ angular.module('codexApp.index', [])
|
||
| 77 | 79 |
$rootScope.$broadcast('footer:info', info);
|
| 78 | 80 |
break; |
| 79 | 81 |
} |
| 82 |
+ var last_view = FileService.getLastHistoryView(); |
|
| 83 |
+ if(last_view !== undefined){
|
|
| 84 |
+ if(last_view.title !== undefined){
|
|
| 85 |
+ $location.hash(last_view.title); |
|
| 86 |
+ console.log("return list pointer to item " + last_view.title)
|
|
| 87 |
+ } else {
|
|
| 88 |
+ $location.hash('grid');
|
|
| 89 |
+ } |
|
| 90 |
+ } else {
|
|
| 91 |
+ $location.hash('grid');
|
|
| 92 |
+ } |
|
| 80 | 93 |
$location.hash('grid');
|
| 81 | 94 |
$anchorScroll(); |
| 82 |
- loaded = true; |
|
| 83 |
- $scope.fader = "fade-in"; |
|
| 95 |
+ $timeout(function() {
|
|
| 96 |
+ $scope.fader = "fade-in"; |
|
| 97 |
+ loaded = true; |
|
| 98 |
+ view_changing = false; |
|
| 99 |
+ }, 250); |
|
| 84 | 100 |
}, 25); |
| 85 | 101 |
} |
| 86 | 102 |
|
| 87 | 103 |
$scope.setView(); |
| 88 | 104 |
|
| 89 | 105 |
$rootScope.$on('window-view:change', function(){
|
| 90 |
- console.log("Changin view...");
|
|
| 91 |
- current_page = 1; |
|
| 92 |
- loaded = false; |
|
| 93 |
- $scope.fader = "fade-out"; |
|
| 106 |
+ if(view_changing == false){
|
|
| 107 |
+ view_changing = true |
|
| 108 |
+ console.log("Changin view...");
|
|
| 109 |
+ current_page = 1; |
|
| 110 |
+ loaded = false; |
|
| 111 |
+ $scope.fader = "fade-out"; |
|
| 94 | 112 |
|
| 95 |
- var state = FileService.getCurrentNote(); |
|
| 96 |
- if(state.type == "All Notes" || state.type == "All Files" || state.type == "Folder"){
|
|
| 97 |
- $scope.setView(); |
|
| 98 |
- } else {
|
|
| 99 |
- $timeout(function() {
|
|
| 100 |
- $state.go($state.current, {}, {reload: true});
|
|
| 101 |
- }, 200); |
|
| 113 |
+ var state = FileService.getCurrentNote(); |
|
| 114 |
+ if(state.type == "All Notes" || state.type == "All Files" || state.type == "Folder"){
|
|
| 115 |
+ $scope.setView(); |
|
| 116 |
+ } else {
|
|
| 117 |
+ $timeout(function() {
|
|
| 118 |
+ $state.go($state.current, {}, {reload: true});
|
|
| 119 |
+ }, 200); |
|
| 120 |
+ } |
|
| 102 | 121 |
} |
| 103 | 122 |
}); |
| 104 | 123 |
|
@@ -239,7 +258,6 @@ angular.module('codexApp.index', [])
|
||
| 239 | 258 |
} else {
|
| 240 | 259 |
break; |
| 241 | 260 |
} |
| 242 |
- |
|
| 243 | 261 |
} |
| 244 | 262 |
all_files.splice(0, i + 1); |
| 245 | 263 |
} |
@@ -6,19 +6,24 @@ angular.module('codexApp')
|
||
| 6 | 6 |
var appData = {};
|
| 7 | 7 |
var notes_dir = ""; |
| 8 | 8 |
var searched_files = []; |
| 9 |
+ var recent_file_views = []; |
|
| 9 | 10 |
|
| 10 | 11 |
var getAppData = function(){
|
| 11 |
- var remote = require('remote');
|
|
| 12 |
- var app = remote.require('app');
|
|
| 13 |
- appDataPath = app.getPath("userData");
|
|
| 14 |
- defaultUserContentPath = app.getPath("home") + "/Documents/codex";
|
|
| 15 |
- findOrGenerateUserDataFile(appDataPath, defaultUserContentPath); |
|
| 16 |
- var raw_data = fs.readFileSync(appDataPath + '/userData.json', 'utf8'); |
|
| 17 |
- var data = JSON.parse(raw_data); |
|
| 18 |
- appData = data; |
|
| 19 |
- notes_dir = appData.UserDataDirectory; |
|
| 20 |
- default_notes_dir = notes_dir + "/inbox"; |
|
| 21 |
- default_home_note = notes_dir + "/index.md" |
|
| 12 |
+ if(notes_dir === ""){
|
|
| 13 |
+ var remote = require('remote');
|
|
| 14 |
+ var app = remote.require('app');
|
|
| 15 |
+ appDataPath = app.getPath("userData");
|
|
| 16 |
+ defaultUserContentPath = app.getPath("home") + "/Documents/codex";
|
|
| 17 |
+ findOrGenerateUserDataFile(appDataPath, defaultUserContentPath); |
|
| 18 |
+ var raw_data = fs.readFileSync(appDataPath + '/userData.json', 'utf8'); |
|
| 19 |
+ var data = JSON.parse(raw_data); |
|
| 20 |
+ appData = data; |
|
| 21 |
+ notes_dir = appData.UserDataDirectory; |
|
| 22 |
+ default_notes_dir = notes_dir + "/inbox"; |
|
| 23 |
+ default_home_note = notes_dir + "/index.md" |
|
| 24 |
+ } else {
|
|
| 25 |
+ data = appData; |
|
| 26 |
+ } |
|
| 22 | 27 |
return data |
| 23 | 28 |
} |
| 24 | 29 |
|
@@ -216,40 +221,30 @@ angular.module('codexApp')
|
||
| 216 | 221 |
return file_obj; |
| 217 | 222 |
} |
| 218 | 223 |
|
| 219 |
- var getNotesFromFolders = function(dir) {
|
|
| 224 |
+ var getAllFilesFromFolder = function(dir) {
|
|
| 220 | 225 |
if (typeof(dir)==='undefined') dir = notes_dir; |
| 221 |
- var filesystem = require("fs");
|
|
| 222 |
- filesystem.readdirSync(dir).forEach(function(file) {
|
|
| 223 |
- |
|
| 224 |
- file_path = dir+'/'+file; |
|
| 225 |
- var stat = filesystem.statSync(file_path); |
|
| 226 |
- if (stat && stat.isDirectory()) {
|
|
| 227 |
- notes = notes.concat(getNotesFromFolders(file_path)) |
|
| 228 |
- } else {
|
|
| 229 |
- if(file == "info.json"){
|
|
| 230 |
- filesystem.readFile(file_path, function(err, data) {
|
|
| 231 |
- var jsonData = JSON.parse(data); |
|
| 232 |
- var file_obj = SetFileInfo(jsonData, dir, file_path, stat) |
|
| 233 |
- notes.push(file_obj); |
|
| 234 |
- }); |
|
| 235 |
- } |
|
| 236 |
- } |
|
| 237 |
- }); |
|
| 238 |
- return notes; |
|
| 226 |
+ console.log("Loading file list for " + dir)
|
|
| 227 |
+ var results = searchRecentFileViews(dir); |
|
| 228 |
+ if(results === undefined){
|
|
| 229 |
+ results = listAllFilesFromFolder(dir) |
|
| 230 |
+ var history = {"dir" : dir, "files" : results }
|
|
| 231 |
+ recent_file_views.push(history); |
|
| 232 |
+ console.log("Saved " + history.files.length + " files...")
|
|
| 233 |
+ } else {
|
|
| 234 |
+ console.log("Loading " + results.length + " files...")
|
|
| 235 |
+ } |
|
| 236 |
+ $rootScope.$broadcast('file-service:files-loaded');
|
|
| 237 |
+ return results; |
|
| 239 | 238 |
}; |
| 240 | 239 |
|
| 241 |
- this.getNotesFromFolders = getNotesFromFolders; |
|
| 242 |
- |
|
| 243 |
- var getAllFilesFromFolder = function(dir) {
|
|
| 244 |
- if (typeof(dir)==='undefined') dir = notes_dir; |
|
| 240 |
+ var listAllFilesFromFolder = function(dir){
|
|
| 245 | 241 |
var filesystem = require("fs");
|
| 246 | 242 |
var results = []; |
| 247 | 243 |
filesystem.readdirSync(dir).forEach(function(file) {
|
| 248 |
- |
|
| 249 | 244 |
file_path = dir+'/'+file; |
| 250 | 245 |
var stat = filesystem.statSync(file_path); |
| 251 | 246 |
if (stat && stat.isDirectory()) {
|
| 252 |
- results = results.concat(getAllFilesFromFolder(file_path)) |
|
| 247 |
+ results = results.concat(listAllFilesFromFolder(file_path)) |
|
| 253 | 248 |
} else {
|
| 254 | 249 |
if(isValidFile(file)) {
|
| 255 | 250 |
var jsonData = {};
|
@@ -257,29 +252,19 @@ angular.module('codexApp')
|
||
| 257 | 252 |
results.push(file_obj); |
| 258 | 253 |
} |
| 259 | 254 |
} |
| 260 |
- |
|
| 261 |
- //console.log(file_obj); |
|
| 262 | 255 |
}); |
| 263 |
- $rootScope.$broadcast('file-service:files-loaded');
|
|
| 264 | 256 |
return results; |
| 265 |
- }; |
|
| 257 |
+ } |
|
| 266 | 258 |
|
| 267 |
- var getFilesFromFolder = function(dir) {
|
|
| 268 |
- if (typeof(dir)==='undefined') dir = notes_dir; |
|
| 269 |
- var filesystem = require("fs");
|
|
| 270 |
- var results = []; |
|
| 271 |
- filesystem.readdirSync(dir).forEach(function(file) {
|
|
| 272 |
- file_path = dir+'/'+file; |
|
| 273 |
- var stat = filesystem.statSync(file_path); |
|
| 274 |
- if(isValidFile(file)) {
|
|
| 275 |
- var jsonData = {};
|
|
| 276 |
- var file_obj = SetFileInfo(jsonData, dir, file_path, stat) |
|
| 277 |
- results.push(file_obj); |
|
| 259 |
+ var searchRecentFileViews = function(dir){
|
|
| 260 |
+ for (var i = 0; i < recent_file_views.length; i++) {
|
|
| 261 |
+ if(recent_file_views[i].dir == dir){
|
|
| 262 |
+ var files = extend([], recent_file_views[i].files); |
|
| 263 |
+ return files |
|
| 278 | 264 |
} |
| 279 |
- }); |
|
| 280 |
- $rootScope.$broadcast('file-service:files-loaded');
|
|
| 281 |
- return results; |
|
| 282 |
- }; |
|
| 265 |
+ } |
|
| 266 |
+ } |
|
| 267 |
+ |
|
| 283 | 268 |
|
| 284 | 269 |
var findNoteInFolder = function(note_id, dir) {
|
| 285 | 270 |
if (typeof(dir)==='undefined') dir = notes_dir; |
@@ -491,6 +476,18 @@ angular.module('codexApp')
|
||
| 491 | 476 |
return true; |
| 492 | 477 |
} |
| 493 | 478 |
|
| 479 |
+ extend = function(origin, add) {
|
|
| 480 |
+ // Don't do anything if add isn't an object |
|
| 481 |
+ if (!add || typeof add !== 'object') return origin; |
|
| 482 |
+ |
|
| 483 |
+ var keys = Object.keys(add); |
|
| 484 |
+ var i = keys.length; |
|
| 485 |
+ while (i--) {
|
|
| 486 |
+ origin[keys[i]] = add[keys[i]]; |
|
| 487 |
+ } |
|
| 488 |
+ return origin; |
|
| 489 |
+ }; |
|
| 490 |
+ |
|
| 494 | 491 |
|
| 495 | 492 |
|
| 496 | 493 |
// RESPONSE |
@@ -561,6 +558,10 @@ angular.module('codexApp')
|
||
| 561 | 558 |
} |
| 562 | 559 |
} |
| 563 | 560 |
|
| 561 |
+ this.getLastHistoryView = function(){
|
|
| 562 |
+ return note_history[note_history.length - 2] |
|
| 563 |
+ } |
|
| 564 |
+ |
|
| 564 | 565 |
this.setNotesDir = function(dir) {
|
| 565 | 566 |
appData.UserDataDirectory = dir[0]; |
| 566 | 567 |
saveAppData(appData); |
@@ -21,7 +21,7 @@ |
||
| 21 | 21 |
|
| 22 | 22 |
<div class="file-view" style="height: 100%; overflow-y: scroll"> |
| 23 | 23 |
<ul id="grid" infinite-scroll='infiniteScroll()' infinite-scroll-distance='4' infinite-scroll-immediate-check="false" infinite-scroll-parent="true"> |
| 24 |
- <li ng-repeat="file in files track by $index" ng-dblclick="openFile(file)" class="file-view-item" ng-class="fader" isotope-item="{{file.path}}" style="display: block;">
|
|
| 24 |
+ <li id="{{file.title}}" ng-repeat="file in files track by $index" ng-dblclick="openFile(file)" class="file-view-item" ng-class="fader" isotope-item="{{file.path}}" style="display: block; opacity: 0;">
|
|
| 25 | 25 |
<div class="thumbnail-icon" ng-show="file.type != 'Folder'" ng-right-click="fileContextMenu(file)"> |
| 26 | 26 |
<img src="{{getImageURL(file.path)}}" ng-hide="isImage(file.type)">
|
| 27 | 27 |
<img src="{{file.thumbnail}}" ng-show="isImage(file.type)">
|